def calculate_bmr(sex, age, weight, height):
    """
    根据哈里斯-贝内迪克特方程计算基础代谢率（BMR）。
    :param sex: 性别，'m' 代表男性，'f' 代表女性
    :param age: 年龄（岁）
    :param weight: 体重（千克）
    :param height: 身高（厘米）
    :return: 基础代谢率（卡路里/天）
    """
    if sex.lower() == 'm':  # 确保性别输入是小写
        bmr = 66 + (13.75 * weight) + (5 * height) - (6.76 * age)
    elif sex.lower() == 'f':
        bmr = 655 + (9.56 * weight) + (1.85 * height) - (4.68 * age)
    else:
        raise ValueError("性别输入错误，请输入'm'代表男性或'f'代表女性。")
    return bmr

def health_analysis(bmr):
    """
    根据BMR值提供健康分析。
    :param bmr: 基础代谢率（卡路里/天）
    :return: 健康分析的字符串
    """
    if bmr < 1200:
        return "您的BMR值较低，可能表明您的身体基础代谢较慢。建议咨询医生或营养师。"
    elif 1200 <= bmr <= 2000:
        return "您的BMR值处于正常范围。继续保持健康的饮食和运动习惯。"
    else:
        return "您的BMR值较高，可能表明您的身体基础代谢较快。注意饮食平衡和适量运动。"

def get_user_input(prompt, data_type, condition=lambda x: True):
    """
    获取并验证用户输入。
    :param prompt: 输入提示
    :param data_type: 输入数据类型，如 int 或 float
    :param condition: 输入条件函数，输入必须满足此条件
    :return: 验证后的用户输入
    """
    while True:
        try:
            user_input = data_type(input(prompt))
            if condition(user_input):
                return user_input
            else:
                print("输入不满足条件，请重新输入。")
        except ValueError:
            print(f"输入错误，请确保输入的是{data_type.__name__}类型的有效数据。")

def main():
    print("欢迎使用基础代谢率（BMR）健康分析程序！")
    sex = input("请输入您的性别（'m' 代表男性，'f' 代表女性）：").lower()
    age = get_user_input("请输入您的年龄：", int, lambda x: x > 0 and x < 120)
    weight = get_user_input("请输入您的体重（千克）：", float, lambda x: x > 0)
    height = get_user_input("请输入您的身高（厘米）：", float, lambda x: x > 100 and x < 250)

    bmr = calculate_bmr(sex, age, weight, height)
    analysis = health_analysis(bmr)

    print(f"\n根据您的信息，您的基础代谢率（BMR）是：{bmr} 卡路里/天。")
    print(analysis)

if __name__ == "__main__":
    main()